package com.jy.wms.service;

import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.common.base.SucessException;
import com.jy.wms.dao.WmsStockMapper;
import com.jy.wms.pojo.WmsOrderRepairDetailed;
import com.jy.wms.dao.WmsOrderRepairDetailedMapper;
import com.jy.wms.pojo.WmsStock;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;

    /**
    * @ClassName: WmsOrderRepairDetailedService.java
    * @Description: TODO(这里用一句话描述这个类的作用)
    * @Author LH
    * @Date Mon Nov 13 09:23:25 GMT+08:00 2017
    */

    @Service
    public class WmsOrderRepairDetailedService extends BaseService<WmsOrderRepairDetailedMapper,WmsOrderRepairDetailed> {

        @Autowired
        private WmsStockMapper wmsStockMapper;
     /**
     * 插入一条记录
     * @param entity 实体对象
     * @return int
     */
    public Integer baseInsert( WmsOrderRepairDetailed entity){
         return dao.baseInsert( entity );
    }

   /**
    * 插入一条记录（匹配有值的字段）
    * @param entity 实体对象
    * @return int
    */
    public Integer baseInsertSelective( WmsOrderRepairDetailed entity){
         return dao.baseInsertSelective( entity);
    }

   /**
    * 删除（根据主键ID删除）
    * @param id 主键
    * @return int
    */
    public Integer baseDeleteByPrimaryKey( String id){
         return dao.baseDeleteByPrimaryKey( id);
    }

   /**
    * 删除（根据ID 批量删除）
    * @param idList 主键ID列表
    * @return int
    */
    public Integer baseDeleteBathPrimaryKeys( List<String> idList){
         return dao.baseDeleteBathPrimaryKeys( idList );
    }

    /**
    * 分页查询
    * @param entity 实体
    * @return Page<WmsOrderRepairDetailed>
    */
    public Page<WmsOrderRepairDetailed> baseSelectPage(WmsOrderRepairDetailed entity ){
        PageHelper.startPage(entity.getPage(),entity.getRows());
        return (Page<WmsOrderRepairDetailed>)dao.baseSelectPage( entity );
    }

   /**
    * 查询（根据主键ID查询）
    * @param id 主键ID
    * @return WmsOrderRepairDetailed
    */
    public WmsOrderRepairDetailed baseSelectByPrimaryKey( String id ){
         return dao.baseSelectByPrimaryKey( id );
    }

   /**
    * 查询（根据ID 批量查询）
    * @param idList 主键ID列表
    * @return list
    */
    public Integer baseSelectBathPrimaryKeys( List<WmsOrderRepairDetailed> idList ){
         return dao.baseSelectBathPrimaryKeys( idList );
    }

   /**
    *修改 （匹配有值的字段）
    * @param entity 补货单明细  只能修改状态为“已生成”的记录
    * @return int
    */
    @Transactional
    public Integer baseUpdateByPrimaryKeySelective(WmsOrderRepairDetailed entity) throws SucessException, ServiceException {
         //首先获取未更改的原来明细的信息
         WmsOrderRepairDetailed wmsOrderRepairDetailed= dao.selectById(entity.getId());
        //修改数量时原库存的补货数量也随之改变（将原库存的补货数量减去补货明细的数量，然后在明细更改时再加上当前更改的数量）
         String kcid=wmsOrderRepairDetailed.getKcid();//库存id
         BigDecimal ybhsl=wmsOrderRepairDetailed.getBhsl();//原来明细的补货数量
         WmsStock wmsStock=wmsStockMapper.selectById(kcid);//库存对象
         BigDecimal kcxbhsl= new BigDecimal(wmsStock.getBhsl()).subtract(ybhsl);//库存的原补货数量减去明细的补货数量得到库存现补货数量
         BigDecimal xbhsl= kcxbhsl.add(entity.getBhsl());//将新的补货数量加在库存的补货数量上
         int num= dao.updateStock(kcid,String.valueOf(xbhsl));//修改库存数量
         Integer a=dao.baseUpdateByPrimaryKeySelective( entity);//修改补货明细
         if(a>0){
             throw new SucessException("补货明细修改成功");
         }else{
             throw new ServiceException("补货明细修改失败");
         }
    }


}
